//? JavaScript中的管道函数指的是将一个值作为输入，通过一系列的函数处理，最终得到输出结果的技术。
//? 在JavaScript中，可以使用管道函数库如Ramda和Lodash/fp等来实现管道函数
//? 管道函数:即一个函数调用另一个函数的结果 pipe(func,func, func)(arg) 相当于 c(b(a(1)))
//? 故调用pipe函数时返回的必须是函数 才能继续()调用 这个返回函数里需要用到上一个函数结果(也就是这个函数里有需要用到函数的连续调用)

//? 单参传递
function pipe(...fns) {
    return function (value) {
        return fns.reduce((acc,fn) => {
            return fn(acc)
        },value)
    }
}
//? 多参传递
function pipe2(...args1){
    return function(...args2){
        if(args1.length === 0) return;
        if(args1.length === 1) return args1[0](...args2);
        return args1.reduce((a, b) => function() {
            return b(a(...args2))
        })()
    }
};
//? 用于测试的示例函数
function addOne(x) {
    return x + 1;
}
function double(x) {
    return x * 2;
}
function minusTen(x) {
    return x - 10;
}
const result = pipe(addOne, double, minusTen)(5);
console.log(result);
